// 结合操作

class Set {
  constructor() {
    this.dataStore = []
  }

  add(element) {
    if(this.dataStore.indexOf(element)) {
      this.dataStore.push(element)
      return true
    }
    return false
  }

  remove(element) {
    const pos = this.dataStore.indexOf(element)
    if(pos > -1) {
      this.dataStore.splice(pos, 1)
      return true
    }
    return false
  }

  union(set) {
    const temp = new Set()
    for(let i = 0; i < this.dataStore.length; i++) {
      temp.add(this.dataStore[i])
    }
    for(let i = 0; i < set.dataStore.length; i++) {
      temp.add(set.dataStore[i])
    }
    return temp 
  }

  intersect(set) {
    const temp = new Set()
    for(let i = 0; i < this.dataStore.length; i++) {
      if(set.contains(this.dataStore[i])) {
        temp.add(this.dataStore[i])
      }
    }
    return temp
  }

  difference(set) {
    const temp = new Set()
    for(let i = 0; i < this.dataStore.length; i++) {
      if(!set.contains(this.dataStore[i])) {
        temp.add(this.dataStore[i])
      }
    }
    return temp
  }

  contains(element) {
    return this.dataStore.indexOf(element) > -1
      ? true
      : false
  }

  show() {
    console.log(this.dataStore)
    return this.dataStore
  }

  length() {
    return this.dataStore.length
  }
}

const set1 = new Set()

set1.add('a')
set1.add('b')
set1.add('c')

set1.show()

const set2 = new Set()

set2.add('a')
set2.add('d')
set2.add('e')

const setUnion = set1.union(set2)     // 并集
const setInter = set1.intersect(set2) // 交集
const setDiffe = set1.difference(set2)// 补集

setUnion.show()
setInter.show()
setDiffe.show()
